﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using System.Collections;

namespace LCWMS
{
    public partial class  w_so064 : DockContent
    {
        DataSet dscustomer;
        DataSet ds_tran;
        Cursor currentCursor = Cursor.Current;

        public w_so064()
        {
            InitializeComponent();
            dgv_tran.AutoGenerateColumns = false;
        }



        //添加采购定单的合计行
        private void f_add_order()
        {
            decimal d_1, d_2, d_3, d_4, d_5, d_6, d_7;
            DataTable dt_put;
            //增加一个合计行 
            dt_put = (DataTable)dgv_tran.DataSource;
            d_1 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["applyamount"].ColumnName + ")", "true");
            //d_2 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["planamount"].ColumnName + ")", "true");
            //d_3 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["skuamount"].ColumnName + ")", "true");
            //d_4 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["shouldqty"].ColumnName + ")", "true");
            //d_5 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["allocateqty"].ColumnName + ")", "true");
            //d_6 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["allocateamount"].ColumnName + ")", "true");
            //d_7 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["shotqty"].ColumnName + ")", "true");
            DataRow dr = dt_put.NewRow();
            dr["so_no"] = "合计";
            dr["applyamount"] = d_1;
            //dr["planamount"] = d_2;
            //dr["skuamount"] = d_3;
            //dr["shouldqty"] = d_4;
            //dr["allocateqty"] = d_5;
            //dr["allocateamount"] = d_6;
            //dr["shotqty"] = d_7;
            ((DataTable)dgv_tran.DataSource).Rows.InsertAt(dr, ((DataTable)dgv_tran.DataSource).Rows.Count);
        }


        private void btn_Query_Click(object sender, EventArgs e)
        {
            if (!chkBox_yhday.Checked && !chkBox_bhday.Checked) {
                MessageBox.Show("'要货日期'与'推送日期'至少选一个!");
                return;
            }

            lb_rows.Text = "总行数：0";

            // 设置为忙碌状态
            Cursor.Current = Cursors.WaitCursor;

            string str_sql = "select RTRIM(a.so_no) so_no,RTRIM(a.so_day) so_day,(case when isnull(b.push_flag,'0')='0' then '未推送' when b.push_flag in ('1','2','3','4','9') then '已推送' when b.push_flag='D' then '作废' end) as pushstatus," +
                    "RTRIM(a.customer_code) customer_code,RTRIM(c.consignor_name) consignor_name,RTRIM(a.standby_11) as applyer,a.standby_9 as applyamount,b.made_time as pushtime " +
                    "from " + main.g_space + ".so_ship_header a " +
                    "left join " + main.g_space + ".so_push b on b.inv_org=a.inv_org and b.consignor=a.consignor and b.so_no=a.so_no " +
                    "left join " + main.g_space + ".mst_customer c on a.customer_code=c.consignor where 1=1 and (a.so_type='0' or a.so_type='3') ";



            string str_sql_where = "";
            if (cb_consignor.Text.Trim() != "")
            {
                str_sql_where = "and a.consignor = '" + cb_consignor.Text.Trim() + "' ";
            }


            //if (tb_sono.Text.Trim() != "")
            //{
            //    str_sql = str_sql + "and a.so_no = '" + tb_sono.Text.Trim() + "' ";
            //}

            //判断要货单
            if (tb_sono.Text.Trim() != "")
            {
                string[] custList = tb_sono.Text.Trim().Split(',');
                string custWhere = "";
                if (custList.Length > 0)
                {
                    foreach (string item in custList)
                    {
                        if (custWhere == "")
                        {
                            custWhere = "'" + item + "'";
                        }
                        else
                        {
                            custWhere += ",'" + item + "'";
                        }
                    }
                    str_sql = str_sql + "and a.so_no in (" + custWhere + ") ";
                }

            }

            if (chkBox_yhday.Checked) {

                str_sql = str_sql + "and a.so_day between '" + dtp_h_time.Text.ToString().Trim() + "' and '" + dtp_h_endtime.Text.ToString().Trim() + "' ";
            }

            if (cbBox_push.Text.ToString().Trim() != "") {
                if (cbBox_push.Text.ToString().Trim() == "全部")
                {
                    //推送日期
                    if (chkBox_bhday.Checked)
                    {
                        str_sql = str_sql + "and convert(char(10),b.made_time,102) between '" + dtp_b_time.Text.ToString().Trim() + "' and '" + dtp_b_endtime.Text.ToString().Trim() + "' ";
                    }
                }
                else if (cbBox_push.Text.ToString().Trim() == "未推送") {
                    //str_sql = str_sql + " and b.push_flag='0' ";
                    str_sql = str_sql + "and not exists (select c.so_no from " + main.g_space + ".so_push c where c.inv_org=a.inv_org and c.consignor=a.consignor and c.so_no=a.so_no and isnull(b.push_flag,'0') in ('1','2','3','9','D') ) ";
                }
                else if (cbBox_push.Text.ToString().Trim() == "已推送")
                {
                    str_sql = str_sql + "and isnull(b.push_flag,'0') in ('1','2','3','4','9') ";
                    //推送日期
                    if (chkBox_bhday.Checked)
                    {
                        str_sql = str_sql + "and convert(char(10),b.made_time,102) between '" + dtp_b_time.Text.ToString().Trim() + "' and '" + dtp_b_endtime.Text.ToString().Trim() + "' ";
                    }
                }
                else if (cbBox_push.Text.ToString().Trim() == "作废")
                {
                    str_sql = str_sql + "and isnull(b.push_flag,'0')='D' ";
                    //推送日期
                    if (chkBox_bhday.Checked)
                    {
                        str_sql = str_sql + "and convert(char(10),b.made_time,102) between '" + dtp_b_time.Text.ToString().Trim() + "' and '" + dtp_b_endtime.Text.ToString().Trim() + "' ";
                    }
                }
            }

            //判断门店号
            if (tb_customer_code.Text.Trim() != "")
            {
                string[] custList = tb_customer_code.Text.Trim().Split(',');
                string custWhere = "";
                if (custList.Length > 0) {
                    foreach (string item in custList) {
                        if (custWhere == "")
                        {
                            custWhere = "'" + item + "'";
                        }
                        else {
                            custWhere += ",'" + item + "'";
                        }
                    }
                    str_sql = str_sql + "and a.customer_code in (" + custWhere + ") ";
                }
               
            }

            //判断单品吗
            if (tb_sku.Text.Trim() != "")
            {
                string[] custList = tb_sku.Text.Trim().Split(',');
                string custWhere = "";
                if (custList.Length > 0)
                {
                    foreach (string item in custList)
                    {
                        if (custWhere == "")
                        {
                            custWhere = "'" + item + "'";
                        }
                        else
                        {
                            custWhere += ",'" + item + "'";
                        }
                    }
                    //str_sql = str_sql + "and a.sku in (" + custWhere + ") ";
                    str_sql = str_sql + "and exists(select so_no from wms.so_ship_detail dtl where dtl.so_no = a.so_no and dtl.sku in (" + custWhere + ")) ";
                    
                }

            }
           
            str_sql += " order by a.so_day,a.so_no,a.customer_code ";
            try
            {
                if (main.dbtype == "SQL")
                {
                    ds_tran = main.dbservice.Sql_exec_selectsql(str_sql);
                }
                else
                {
                    ds_tran = main.dbservice.oracle_exec_selectsql(str_sql);
                }
                if (ds_tran.Tables[0].Rows.Count > 0)
                {
                    lb_rows.Text = "总行数：" + ds_tran.Tables[0].Rows.Count.ToString();
                    dgv_tran.DataSource = ds_tran.Tables[0];
                    f_add_order();
                }
                else
                    dgv_tran.DataSource = null;
            }
            catch (System.Exception ee)
            {
                dgv_tran.DataSource = null;
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to Query", main.g_info_dataset) + "!" + ee.ToString());
            }
            Cursor.Current = currentCursor;
        }

        private void w_so064_Load(object sender, EventArgs e)
        {
            dscustomer = new DataSet();
            try
            {
                dscustomer = new DataSet();
                dscustomer = main.g_class.comm_get_consignor();
                cb_consignor.DataSource = dscustomer.Tables[0];
                cb_consignor.ValueMember = "consignor";
                cb_consignor.DisplayMember = "consignor";

                //语言转换
                main.g_class.comm_changeControl(this, main.g_win_dataset);
            }
            catch (System.Exception ee)
            {
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to initialize Information of transaction type", main.g_info_dataset) + "!" + ee.ToString());
                return;
            }
            
            dtp_h_time.CustomFormat = "yyyy.MM.dd";
            dtp_h_time.Format = DateTimePickerFormat.Custom;
            //dtp_h_time.Value = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy.MM.dd").Trim());
            dtp_h_time.Value = System.Convert.ToDateTime(DateTime.Now.AddDays(-7).ToString("yyyy.MM.dd").Trim());

            dtp_h_endtime.CustomFormat = "yyyy.MM.dd";
            dtp_h_endtime.Format = DateTimePickerFormat.Custom;
            dtp_h_endtime.Value = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy.MM.dd").Trim());

            dtp_b_time.CustomFormat = "yyyy.MM.dd";
            dtp_b_time.Format = DateTimePickerFormat.Custom;
            //dtp_b_time.Value = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy.MM.dd").Trim());
            dtp_b_time.Value = System.Convert.ToDateTime(DateTime.Now.AddDays(-7).ToString("yyyy.MM.dd").Trim());

            dtp_b_endtime.CustomFormat = "yyyy.MM.dd";
            dtp_b_endtime.Format = DateTimePickerFormat.Custom;
            dtp_b_endtime.Value = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy.MM.dd").Trim());

            //按钮权限控制
            string str_right;
            str_right = main.g_class.comm_getright("w_so064", main.g_right_dataset);


            //查询
            if (str_right.Substring(4, 1) == "0")
            {
                this.btn_Query.Visible = false;
            }

            else
            {
                this.btn_Query.Visible = true;
            }

            //导出ＥＸＣＥＬ
            if (str_right.Substring(5, 1) == "0")
            {
                this.btn_excel.Visible = false;
            }
            else
            {
                this.btn_excel.Visible = true;
            }

            //推送状态默认：全部
            cbBox_push.SelectedIndex = 0;
           
        }

       
        private void cb_consignor_TextChanged(object sender, EventArgs e)
        {
            string str_cust;
            str_cust = cb_consignor.Text.Trim();
            tb_cusname.Text = main.g_class.comm_findname(str_cust, dscustomer);
        }

     
        private void btn_excel_Click(object sender, EventArgs e)
        {
            if (dgv_tran.Rows.Count > 0)
            {
                main.g_class.DataGridViewToExcel(dgv_tran);
            }
        }


        //复制某一列值到剪贴板
        private void CopyColumnValueToClipboard(DataGridView dgv, int rowIndex, int columnIndex)
        {
            if (dgv.Rows.Count <= rowIndex || columnIndex < 0)
            {
                // 检查索引是否超出范围
                return;
            }

            string value = dgv.Rows[rowIndex].Cells[columnIndex].Value.ToString();
            if (value != null)
            {
                Clipboard.SetText(value);

                MessageBox.Show("已复制到剪贴板");
            }
        }

        private void dgv_tran_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int i_temp = dgv_tran.CurrentRow.Index;
            string str_name = dgv_tran.Columns[dgv_tran.CurrentCell.ColumnIndex].Name.ToString().Trim();
            //if (str_name == "so_no")
            {
                //如果你想复制第n行第1列的值：
                CopyColumnValueToClipboard(dgv_tran, i_temp, dgv_tran.CurrentCell.ColumnIndex);
            }
        }

        private void cbBox_push_TextChanged(object sender, EventArgs e)
        {
            if (cbBox_push.Text.Trim() == "未推送")
            {

                chkBox_bhday.Checked = false;
            }
        }

        private void chkBox_bhday_CheckedChanged(object sender, EventArgs e)
        {
            if (chkBox_bhday.Checked && cbBox_push.Text.Trim() == "未推送")
            {
                cbBox_push.SelectedIndex = 0;
            
            }
        }

        private void dgv_tran_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            //自动编号，与数据无关
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
               e.RowBounds.Location.Y,
               dgv_tran.RowHeadersWidth - 4,
               e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics,
                  (e.RowIndex + 1).ToString(),
                   dgv_tran.RowHeadersDefaultCellStyle.Font,
                   rectangle,
                   dgv_tran.RowHeadersDefaultCellStyle.ForeColor,
                   TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }

        private void btn_q_customer_code_Click(object sender, EventArgs e)
        {
            w_query_batch wsingle = new w_query_batch();
            wsingle.ShowDialog();
            this.tb_customer_code.Text = w_query_batch.str_qcontent;
        }

        private void btn_q_sono_Click(object sender, EventArgs e)
        {
            w_query_batch wsingle = new w_query_batch();
            wsingle.ShowDialog();
            this.tb_sono.Text = w_query_batch.str_qcontent;
        }

        private void btn_q_sku_Click(object sender, EventArgs e)
        {
            w_query_batch wsingle = new w_query_batch();
            wsingle.ShowDialog();
            this.tb_sku.Text = w_query_batch.str_qcontent;
        }

        // 删除行
        private void dgv_tran_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ContextMenu m = new ContextMenu(); // 创建一个 ContextMenu
                MenuItem deleteRowItem = new MenuItem("删除行"); // 创建一个 MenuItem
                deleteRowItem.Click += dgv_tran_DeleteRowItem_Click; // 添加点击事件
                m.MenuItems.Add(deleteRowItem);

                int currentMouseOverRow = dgv_tran.HitTest(e.X, e.Y).RowIndex;   // 将 MenuItem 添加到 ContextMenu
                m.Show(dgv_tran, new Point(e.X, e.Y));                           // 显示 ContextMenu
            }
        }

        private void dgv_tran_DeleteRowItem_Click(object sender, EventArgs e)
        {

            w_dgv_deleterow wsingle = new w_dgv_deleterow();
            wsingle.ShowDialog();
            int i_row_start = w_dgv_deleterow.i_row_start - 1;
            int i_row_end = w_dgv_deleterow.i_row_end - 1;

            // 确保起始行和结束行在有效范围内
            if (i_row_start < 0) return;
            if (i_row_end >= dgv_tran.Rows.Count || i_row_start > i_row_end)
            {
                MessageBox.Show("超出有效范围！");
                return;
            }

            // 从 DataGridView 中删除指定范围的行 (从后向前删除行，避免索引变化问题)
            for (int i = i_row_end; i >= i_row_start; i--)
            {
                dgv_tran.Rows.RemoveAt(i);
            }

        }

        
    }
}